package com.hangxiang.approval.exception;

import com.hangxiang.approval.common.ResultBean;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@RestController
@ControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 用于处理参数校验错误
     * @Validated校验失败时会抛出MethodArgumentNotValidException异常
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Map<String,Object> methodArgumentValidExceptionHandler(MethodArgumentNotValidException e) throws Exception {
        String message = null;
        //如果抛出了异常，这个getErrorCount一定会>0
        if (e.getBindingResult().getErrorCount() > 0) {
            //校验会把所有不通过的选项的错误信息记录下来，现在先默认给前端提供第一个错误信息
            message = e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
        }
        Map<String,Object> map = new HashMap<>();
        map.put("code",500);
        map.put("message",message);
        return map;
    }

    @ExceptionHandler(MyException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    //在这个方法里定义我们需要返回的格式
    public ResponseEntity handleUserNotExistException(HttpServletRequest request, MyException ex){
        return new ResponseEntity(ResultBean.error(ex), HttpStatus.OK);
    }
    
}